import router from '../router/index'
import store from '../store/index'
import {Message} from 'element-ui'
import NProgree from 'nprogress'
import 'nprogress/nprogress.css'
// import el from 'element-ui/src/locale/lang/el'

// 获取 localstorage 存储的 token
// import {getToken} from '../utils/storage'

NProgree.config({showSpinner: false})

// 定义一个路由白名单
const whiteRouterArr = ['/login', '/auth-redirect', '/register']

// 调用导航守卫 这里选择 beforeEach()  和beforeResolve() 这两种都是可以的
router.beforeResolve((to, from, next) => {
  NProgree.start()
  // 判断是从 localstorage 中否获取的路由
  // eslint-disable-next-line no-constant-condition
  if (true) {
    // 判断当前访问的路径是否为 login
    if (to.path === '/login') {
      next({path: '/'})
      NProgree.done()
    } else {
      // 判断是否从store中获取的值
      if (store.getters.roles.length === 0) {
        // 判断当前用户是否已经拉去完user_info 信息
        store.dispatch('GetInfo').then(res => {
          // 获取 user_info 信息
          const roles = res.data.roles
          store.dispatch('GenerateRoutes', {roles}).then(accessRouter => {
            // 根据 roles 权限生成可访问的权限
            router.addRoutes(accessRouter) // 动态添加可访问路由表
            next({...to, replace: true}) // hack 方面确保 addRoutes 已经完成
          })
            .catch(err => {
              store.dispatch('FedLoginOut').then(() => {
                Message.error(err)
                next({path: '/'})
              })
            })
        })
      } else {
        next()
      }
    }
  } else {
    // 没有token
    if (whiteRouterArr.indexOf(to.path) !== -1) {
      // 在免登录白名单，直接进入
      next()
    } else {
      next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
      NProgree.done()
    }
  }
})
router.afterEach(() => {
  NProgree.done()
})
